package com.caishi.lkx.order.pay;

import com.zzw.common.IPlugins;
import com.caishi.lkx.order.model.PaymentModel;
import com.caishi.lkx.order.model.PaymentRefundLogModel;

import java.util.Map;

/**
 * @author by keray
 * date:2019/9/9 11:14
 */
public interface PayPlugins extends IPlugins {

    /**
     * <p>
     * <h3>作者 keray</h3>
     * <h3>时间： 2019/9/9 11:18</h3>
     * 在线支付之前获取签名
     * </p>
     *
     * @param paymentModel
     * @return <p> {@link Map< String, Object>} </p>
     * @throws
     */
    Map<String, Object> sign(PaymentModel paymentModel, Object val, Map<String, Object> otherParam);

    /**
     * <p>
     * <h3>作者 keray</h3>
     * <h3>时间： 2019/9/9 11:19</h3>
     * 支付完成回调前验证
     * </p>
     *
     * @param paymentModel
     * @return <p> {@link } </p>
     * @throws
     */
    default boolean prePayCallBack(PaymentModel paymentModel)  {
        return true;
    }

    /**
     * <p>
     * <h3>作者 keray</h3>
     * <h3>时间： 2019/9/9 11:53</h3>
     * 支付完成后处理
     * </p>
     *
     * @param paymentModel
     * @return <p> {@link } </p>
     * @throws
     */
    default void postPayCallBack(PaymentModel paymentModel) {

    }

    /**
     * <p>
     * <h3>作者 keray</h3>
     * <h3>时间： 2019/9/10 14:27</h3>
     * 退款
     * </p>
     *
     * @param paymentModel
     * @return <p> {@link } </p>
     * @throws
     */
    boolean refund(PaymentModel paymentModel, PaymentRefundLogModel paymentRefundLogModel) ;

    /**
     * <p>
     * <h3>作者 keray</h3>
     * <h3>时间： 2019/11/28 3:02 PM</h3>
     * 订单取消
     * </p>
     *
     * @param paymentModel
     * @return <p> {@link } </p>
     * @throws
     */
    default void orderCancel(PaymentModel paymentModel) {

    }
}
